﻿using System;
using MoroMoro.Samples.ToDoList.Base.Persistence;

namespace MoroMoro.Samples.ToDoList.Base.Application
{
    /// <summary>
    /// リポジトリ操作が必要となる全ての操作スクリプトの基本クラスです。
    /// </summary>
    /// <typeparam name="TOutputs">出力の型。</typeparam>
    /// <typeparam name="TErrors">エラーの型。</typeparam>
    /// <seealso cref="IWorkspace"/>
    /// <seealso cref="WorkOutputs"/>
    /// <seealso cref="WorkErrors"/>
    [Serializable]
    public abstract class WorkScript<TOutputs, TErrors> : OperationScript<TOutputs, TErrors>
        where TOutputs : WorkOutputs
        where TErrors : WorkErrors
    {
        /// <summary>
        /// <see cref="WorkScript&lt;TOutputs, TErrors&gt;"/> クラスの新しいインスタンスを初期化します。
        /// </summary>
        /// <param name="workspace">作業スペース。</param>
        /// <exception cref="System.ArgumentNullException">workspace が null です。</exception>
        protected WorkScript(IWorkspace workspace)
        {
            if (workspace == null)
            {
                throw new ArgumentNullException("workspace");
            }
            _workspace = workspace;
        }


        /// <summary>
        /// 作業スペース。
        /// </summary>
        private readonly IWorkspace _workspace;


        /// <summary>
        /// 作業スペースを取得します。
        /// </summary>
        protected IWorkspace Workspace
        {
            get
            {
                return _workspace;
            }
        }
    }
}
